package com.acmen.easyapi.generator;

import com.acmen.easyapi.annotation.Param;
import com.power.common.util.DateTimeUtil;
import org.springframework.stereotype.Component;

import java.lang.reflect.Field;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.Random;

/**
 * 生日数据生成器
 *
 *
 * @author acmen
 * @date 2022-04-06
 */
@Component
public class BirthdayDataGenerator implements DataGenerator {

    @Override
    public boolean matches(Field field, Param param) {
        if (field.getName().equalsIgnoreCase("birthday") || param.label().endsWith("生日")) {
            // 如果字段名与"birthday"相同，或者参数标签以"生日"结尾
            return true;
        }
        // 返回false
        return false;

    }

    @Override
    public Object generate(Field field,Param param) {
        // 如果字段的类型是 LocalDate
        if(field.getType().equals(LocalDate.class)){
            // 返回当前日期减去随机数(0, 120)年的结果
            return LocalDate.now().minusYears(new Random().nextInt(120));
        // 如果字段的类型是 LocalDateTime
        }else if(field.getType().equals(LocalDateTime.class)){
            // 返回当前日期时间减去随机数(0, 120)年的结果
            return LocalDateTime.now().minusYears(new Random().nextInt(120));
        // 如果字段的类型是 Date
        }else if(field.getType().equals(Date.class)){
            // 返回当前日期时间减去随机数(0, 120)天后的结果
            return new Date(System.currentTimeMillis()-(new Random().nextInt(120)*360*24*60*60*1000));
        // 如果字段的类型不是上述三种
        }else{
            // 返回当前日期的字符串形式
            return DateTimeUtil.dateToStr(new Date(), DateTimeUtil.DATE_FORMAT_DAY);
        }

    }

    /**
     * 数据获取说明
     *
     * @return
     */
    @Override
    public String getNote() {
        String note = "生日：";
        note += "当字段为birthday或者@ReqParam.name'生日结尾时，随机生成120年内的一个日期。";
        return note;
    }
}
